/*================================================================
*   Copyright (C) 2019 Guangzhou Firefly Ltd. All rights reserved.
*   
*   文件名称：mylog.c
*   创 建 者：luhuadong
*   创建日期：2019年09月11日
*   描    述：
*
================================================================*/


#include "mylog.h"


/* 邮箱控制块 */
static struct rt_mailbox mb;
/* 用于放邮件的内存池 */
static char mb_pool[128];


static void mylog_entry(void *parameter)
{
	struct mylog_msg str;

	while(1)
	{
		if(rt_mb_recv(&mb, (rt_ubase_t *)&str, RT_WAITING_FOREVER) == RT_EOK)
		{
			rt_kprintf("[%s] data is: %d\n", str.tag, str.data);
		}
	}
}

int mylog_init()
{
	rt_err_t result;
	rt_thread_t async_th;

	/* 创建邮箱 */
	result = rt_mb_init(&mb,
		                "mb-air",            /* 名称是 mb-air */
		                &mb_pool[0],         /* 邮箱用到的内存池是 mb_pool */
		                sizeof(mb_pool)/4,   /* 邮箱中的邮件数目，因为一封邮件占 4 字节 */
		                RT_IPC_FLAG_FIFO);   /* 采用 FIFO 方式进行线程等待 */

	if (result != RT_EOK)
    {
        rt_kprintf("init mailbox failed.\n");
        return -1;
    }

	/* 创建线程 */
	async_th = rt_thread_create("mylog", mylog_entry, RT_NULL, 1024, 30, 20);

	if (async_th == RT_NULL) 
	{
        rt_kprintf("create thread (mylog) failed.\n");
        return -1;
    }
    rt_thread_startup(async_th);

    return RT_EOK;
}
INIT_APP_EXPORT(mylog_init);
//MSH_CMD_EXPORT(mylog_init, mylog thread);


/* 
   参数：
   1、tag 表示数据类型（如 temp），
   2、data 表示数据大小 
*/
void mylog(char* tag, void* data)
{
	struct mylog_msg mb_data_send;
	mb_data_send.tag = tag;
	mb_data_send.data = (int)data;

	rt_mb_send(&mb, (rt_ubase_t)&mb_data_send);

	//rt_thread_mdelay(1000);
}
